/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * frmTablaAuxiliarDet.java
 *
 * Created on 19-ago-2011, 20:59:39
 */

package GUI;

import TablasAuxiliares.TACamposPremisas;
import TablasAuxiliares.TAGeneral;
import TablasAuxiliares.TATiposCamposPremisas;
import Util.GestorErrores;
import javax.swing.JOptionPane;
import Util.Varios;

/**
 *
 * @author Javi
 */
public class frmTACamposPremisasDet extends javax.swing.JDialog {

    //Indica la operación que se está realizando
    private char _cOperacion;
    //Referencia al formulario padre
    private frmTACamposPremisas _frmPadre;
    //Referencia al objeto de datos principal
    private TACamposPremisas _oTACamposPremisas;

    /** Creates new form frmTablaAuxiliarDet */
    public frmTACamposPremisasDet(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        getRootPane().setDefaultButton(jButtonAceptar);
    }

    /** Creates new form frmTablaAuxiliarDet */
    public frmTACamposPremisasDet(frmTACamposPremisas parent, boolean modal) {
        super(parent, modal);
        this._frmPadre = parent;
        //Inicializo la referencia al objeto de datos del formulario padre.
        this._oTACamposPremisas = parent.getoObjetoDatos();
        initComponents();
        //Los combos se cargan a partir de las tablas 1 SOLA VEZ, al crear el formulario.
        this.cargarCombos();
        getRootPane().setDefaultButton(jButtonAceptar);
    }

    /*
     * Este método captura los datos introducidos por el usuario y los carga en los atributos
     * correspondientes de la clase.
     */
    private void pantallaAClase(){
        this._oTACamposPremisas.setsTabla( Varios.getClaveItemCombo (jCBTabla) );
        this._oTACamposPremisas.setsCampo( Varios.getClaveItemCombo (jCBCampo) );
        this._oTACamposPremisas.setsTipo( Varios.getClaveItemCombo (jCBTipo) );
        this._oTACamposPremisas.setsTablaAux( Varios.getClaveItemCombo (jCBTablaAux) );
    }

    /*
     * Este método carga los atributos de la clase los controles del formulario de entrada.
     */
    private void claseAPantalla(){
        Varios.seleccionaItemComboDescripcion (jCBTabla, this._oTACamposPremisas.getsTabla());
        //Carga del combo de campos despues de seleccionar en el combo de Tabla
        this.cargarComboCampos(this._oTACamposPremisas.getsTabla());
        //Inicialización del combo de campos
        Varios.seleccionaItemComboDescripcion (jCBCampo, this._oTACamposPremisas.getsCampo());
        Varios.seleccionaItemCombo (jCBTipo, this._oTACamposPremisas.getsTipo());
        Varios.seleccionaItemComboDescripcion (jCBTablaAux, this._oTACamposPremisas.getsTablaAux());
    }

    public void inicializaFormulario ( char cOperacion ){
        //Inicializo el código de operación
        this._cOperacion = cOperacion;
        //Carga los datos de la clase
        this.claseAPantalla();
        //Inicializa los controles necesarios
        this.inicializaControles();
    }

    /*
     * Este método carga y habilita/inhabilita los controles que sean necesarios 
     */
    private void inicializaControles (){
        //Actualizo el título de la ventana en función de la operación.
        this.setTitle( this._frmPadre.getoObjetoDatos().getsDescripTabla() + " - " + Varios.getLiteralOperacion(this._cOperacion) );
        if ( this._cOperacion == 'C' || this._cOperacion == 'B'){
            jCBTabla.setEnabled( false );
            jCBCampo.setEnabled( false );
            jCBTipo.setEnabled( false );
            jCBTablaAux.setEnabled( false );
        }else{
            if ( this._cOperacion == 'A'){
                jCBTabla.setEnabled( true );
                jCBCampo.setEnabled( true );
            }else{
                jCBTabla.setEnabled( false );
                jCBCampo.setEnabled( false );
            }
            jCBTipo.setEnabled( true );
            jCBTablaAux.setEnabled( true );
        }
    }

    /*
     * Inicializa los combos a partir de las tablas auxiliares en forma "codigo - descripcion"
     */
    private void cargarCombos(){
        //Cargo MANUALMENTE las tablas de las que se pueden escoger campos para las reglas
        this.cargaComboTablasUsoEnReglas();
        Varios.cargaCombo (jCBTipo, new TATiposCamposPremisas());
        //Cargo el combo de tablas auxiliares para validación con TODAS las tablas de la BD.
        Varios.cargaComboTabla (jCBTablaAux, new TAGeneral());
    }

    private void cargarComboCampos (String sTabla){
        if (sTabla.equals ("") )
            //Inicializo el combo con un elemento vacío
            Varios.cargaCombo (jCBCampo, null);
        else
            //Cargo el campo con todos los campos de la tabla seleccionada
            Varios.cargaComboCampos (sTabla, jCBCampo, new TAGeneral());
    }

    private void cargaComboTablasUsoEnReglas(){
        //Lo cargo a mano con las tablas de las que se pueden escoger campos
        //Inicializo el combo
        this.jCBTabla.removeAllItems();
        //Inicializo el primer elemento como un elemento vacío
        jCBTabla.addItem ("");
        jCBTabla.addItem ("ClienteDatPers");
        jCBTabla.addItem ("Clientedatsociales");
        jCBTabla.addItem ("Clientedatsocioeco");
        jCBTabla.addItem ("Clientehobbies");
        jCBTabla.addItem ("Compra");
        jCBTabla.addItem ("Bienes");
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel2 = new javax.swing.JLabel();
        jButtonAceptar = new javax.swing.JButton();
        jButtonCancelar = new javax.swing.JButton();
        jCBCampo = new javax.swing.JComboBox();
        jCBTipo = new javax.swing.JComboBox();
        jLabel32 = new javax.swing.JLabel();
        jLabel34 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jCBTabla = new javax.swing.JComboBox();
        jCBTablaAux = new javax.swing.JComboBox();

        setResizable(false);

        jLabel2.setText("Tabla auxiliar (validar contenido)");

        jButtonAceptar.setText("Aceptar");
        jButtonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonAceptarActionPerformed(evt);
            }
        });

        jButtonCancelar.setText("Cancelar");
        jButtonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonCancelarActionPerformed(evt);
            }
        });

        jLabel32.setText("Campo:");

        jLabel34.setText("Tipo del Campo:");

        jLabel3.setText("Tabla:");

        jCBTabla.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jCBTablaActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(23, 23, 23)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel32)
                    .addComponent(jLabel34)
                    .addComponent(jLabel2)
                    .addComponent(jLabel3))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButtonAceptar)
                        .addGap(18, 18, 18)
                        .addComponent(jButtonCancelar))
                    .addComponent(jCBTablaAux, javax.swing.GroupLayout.PREFERRED_SIZE, 229, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jCBCampo, javax.swing.GroupLayout.PREFERRED_SIZE, 229, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jCBTipo, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jCBTabla, javax.swing.GroupLayout.PREFERRED_SIZE, 281, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(43, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(30, 30, 30)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jCBTabla, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel32)
                    .addComponent(jCBCampo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jCBTipo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel34))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jCBTablaAux, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(30, 30, 30)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonAceptar)
                    .addComponent(jButtonCancelar))
                .addGap(23, 23, 23))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButtonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAceptarActionPerformed
        boolean bResultadoOK = false;
        this.pantallaAClase ();
        //Inicializo el vector global de errores
        GestorErrores.getInstancia().getvErrores().clear();
        if (this._cOperacion == 'A')    //Alta
            bResultadoOK = this._oTACamposPremisas.insert();
        else if (this._cOperacion == 'M')    //Actualizacion
            bResultadoOK = this._oTACamposPremisas.update();
        else if (this._cOperacion == 'B'){    //Borrado
            //Pedir confirmación para borrar
            if ( JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog( null, "Va a borrar el registro \n¿Está seguro?" ,"Aviso", JOptionPane.YES_NO_OPTION))
                bResultadoOK = this._oTACamposPremisas.delete();
            else
                return;     //Se cancela la operación
        }else if (this._cOperacion == 'C')    //Consulta
            bResultadoOK = true;

        if ( !bResultadoOK ){
            //Si ha habido errores informo de ellos
            String mensaje = "¡Error en la operación!" + "\n";
            for (int i= 0; i< GestorErrores.getInstancia().getvErrores().size(); i++)
                mensaje = mensaje + GestorErrores.getInstancia().getvErrores().get(i) + "\n";
            JOptionPane.showMessageDialog( null, mensaje,"Aviso", JOptionPane.WARNING_MESSAGE);
        }else{
            //Si no ha habido errores doy mensaje de información de la operación
            if (this._cOperacion == 'A')    //Alta
                JOptionPane.showMessageDialog( null, "Alta realizada","Aviso", JOptionPane.INFORMATION_MESSAGE);
            else if (this._cOperacion == 'M')    //Actualizacion
                JOptionPane.showMessageDialog( null, "Modificación realizada","Aviso", JOptionPane.INFORMATION_MESSAGE);
            else if (this._cOperacion == 'B')    //Borrado
                JOptionPane.showMessageDialog( null, "Baja realizada","Aviso", JOptionPane.INFORMATION_MESSAGE);
            //Si la operación es una CONSULTA no doy ningún aviso.
            //Actualizo la vista de los datos en el formulario padre
            this._frmPadre.actualizarVista("");
        }
        //Ocultar la ventana solo si el resultado ha sido OK.
        setVisible ( (bResultadoOK)? false:true );
    }//GEN-LAST:event_jButtonAceptarActionPerformed

    private void jButtonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelarActionPerformed
        setVisible ( false );
    }//GEN-LAST:event_jButtonCancelarActionPerformed

    private void jCBTablaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBTablaActionPerformed
        this.cargarComboCampos (Varios.getClaveItemCombo (jCBTabla));
    }//GEN-LAST:event_jCBTablaActionPerformed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButtonAceptar;
    private javax.swing.JButton jButtonCancelar;
    private javax.swing.JComboBox jCBCampo;
    private javax.swing.JComboBox jCBTabla;
    private javax.swing.JComboBox jCBTablaAux;
    private javax.swing.JComboBox jCBTipo;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel32;
    private javax.swing.JLabel jLabel34;
    // End of variables declaration//GEN-END:variables

}
